﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.BL.BE;
using DECOR.DL.DALC.SAPC.Proxy;
using System.Data;

namespace DECOR.DL.DALC.SAPC
{

    public class CondicionDALC : ICondicionDALC
    {
        public static CondicionDALC Instance()
        {
            if (_instance == null)
            {
                lock (typeof(CondicionDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new CondicionDALC();
                    }
                }
            }
            return _instance;
        }
        private CondicionDALC() { }
        private static volatile CondicionDALC _instance = null;  
        #region ICondicionDALC Members

        public List<GenericBE> listaCondicionesExpedicion()
        {
            CondicionesProxy proxy = new CondicionesProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            //-----------------
            TVKGGTTable T_TVKGGT = new TVKGGTTable();
            TVSBTTable T_TVSBT = new TVSBTTable();
            proxy.Zweb_Lista_Condiciones(ref T_TVKGGT, ref T_TVSBT);
            //-----------------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-----------------
            List<GenericBE> lst = new List<GenericBE>();
            DataTable dt = T_TVSBT.ToADODataTable();
            foreach (DataRow dr in dt.Rows)
            {
                GenericBE obj = new GenericBE();
                obj.Codigo = dr["VSBED"].ToString();
                obj.Descripcion = dr["VSBED"].ToString() + " :: " + dr["VTEXT"].ToString();
                lst.Add(obj);
            }
            return lst;
        }

        //rgutierrez 05.12.2011
        public List<CondicionBE> ObtenerCondiciones(PedidoBE objPedido, DetalleBE objDetalle, out string retval)
        {
            CondicionesProxy proxy = new CondicionesProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            //-----------------
            ZSSD_MATERIAL PI_SMATERIAL = new ZSSD_MATERIAL();
            ZTT_CONDICIONDCTO PE_TCONDICIONDCTO = new ZTT_CONDICIONDCTO();

            PI_SMATERIAL.Auart = objPedido.CodTipoDoc;
            PI_SMATERIAL.Kunnr = objPedido.CodCliente;
            PI_SMATERIAL.Spart = objPedido.Sector;
            PI_SMATERIAL.Vkorg = objPedido.OrgVentas;
            PI_SMATERIAL.Vtweg = objPedido.CanalDist;
            PI_SMATERIAL.Matnr = objDetalle.CodMaterial;
            PI_SMATERIAL.Fecha = ParametroDALC.dateNetToSap(objPedido.Fecha);
            PI_SMATERIAL.Charg = objDetalle.CodLote;
            PI_SMATERIAL.Zterm = objPedido.CondPago;
            PI_SMATERIAL.Kdkgr = objPedido.GrupoCond;
            PI_SMATERIAL.Kdgrp = "";
            PI_SMATERIAL.Vkbur = objPedido.CodOficina;
            
            proxy.Zweb_Obtener_Condiciones(PI_SMATERIAL, out retval, out PE_TCONDICIONDCTO);
            //-----------------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-----------------
            List<CondicionBE> lst = new List<CondicionBE>();
            DataTable dt = PE_TCONDICIONDCTO.ToADODataTable();
            foreach (DataRow dr in dt.Rows)
            {
                CondicionBE obj = new CondicionBE();
                obj.ClaseCondicion = dr["KSCHL"].ToString();
                obj.Tratamiento = dr["KMANU"].ToString();
                obj.Denominacion = dr["VTEXT"].ToString();
                obj.LimiteInferior = (decimal)dr["MXWRT"];
                lst.Add(obj);
            }
            return lst;
        }

        #endregion
    }
}
